﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace desarrolloMobile.DGT
{
    public static class ExtensionClass
    {

        public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> enumerable)
        {
            var col = new ObservableCollection<T>();
            
            foreach (var cur in enumerable)
            {
                col.Add(cur);
            } 
            
            return col;
        } 

        public static IEnumerable<Incidencia> Deserialize(this Stream objeto, long lenght)
        {
            var readBuffer = new byte[lenght];

            IEnumerable<Incidencia> nuevasIncidencias = null;

            objeto.BeginRead(readBuffer, 0, readBuffer.Length, 
                             readAr =>
                                 {
                                     var read = objeto.EndRead(readAr);
                                     var readText = Encoding.UTF8
                                         .GetString(readBuffer, 0, readBuffer.Length);

                                     nuevasIncidencias = from elemento in XDocument.Parse(readText)
                                                             .Descendants("raiz").Descendants("incidencia")
                                                         select new Incidencia 
                                                                    {
                                                                        Autonomia = elemento.Element(XName.Get("autonomia")).Value.Trim(),
                                                                        Carretera =
                                                                            elemento.Element(XName.Get("carretera")).Value.Trim(),
                                                                        Causa = elemento.Element(XName.Get("causa")).Value.Trim(),
                                                                        FechaHora =
                                                                            elemento.Element(XName.Get("fechahora_ini")).Value.Trim(),
                                                                        Final = elemento.Element(XName.Get("pk_final")).Value.Trim(),
                                                                        Hacia = elemento.Element(XName.Get("hacia")).Value.Trim(),
                                                                        Incial = elemento.Element(XName.Get("pk_inicial")).Value.Trim(),
                                                                        Matricula =
                                                                            elemento.Element(XName.Get("matricula")).Value.Trim(),
                                                                        Nivel = elemento.Element(XName.Get("nivel")).Value.Trim(),
                                                                        Poblacion =
                                                                            elemento.Element(XName.Get("poblacion")).Value.Trim(),
                                                                        Sentido = elemento.Element(XName.Get("sentido")).Value.Trim(),
                                                                        Tipo = elemento.Element(XName.Get("tipo")).Value.Trim()
                                                                    };
                                 }, null);

            return nuevasIncidencias;
        }
    }
}